//////////////////////////////////////////////////////////////////////////

#ifndef _BOOSTSERVICE_H_
#define _BOOSTSERVICE_H_

//////////////////////////////////////////////////////////////////////////

#include <boost/thread.hpp>
#include <boost/asio.hpp>

//////////////////////////////////////////////////////////////////////////


/** This class controls shared boost::io_service object
*
*  @author   Roman Pasechnik
*  @since    Nov 20th, 2009
*  @updated  Nov 20th, 2009
*/
class BoostService
{
//////////////////////////////////////////////////////////////////////////

public:

//////////////////////////////////////////////////////////////////////////


    /** Get IO_SERVICE object */
    static boost::asio::io_service& GetIOService();


    /** Run async operations */
    static void Run();


//////////////////////////////////////////////////////////////////////////

private:

////////////////////////////////////////////////////////////////////////////////
//// Thread routines ( separate thread for IO_SERVICE work )
////////////////////////////////////////////////////////////////////////////////


    /** Thread procedure, where async operations are running */
    static void ThreadProc();


////////////////////////////////////////////////////////////////////////////////


    /** Thread in which boost service works */
    static boost::thread m_Thread;


    /** IO_SERVICE object [Singleton] */
    static boost::asio::io_service* m_IOService;


//////////////////////////////////////////////////////////////////////////
};


//////////////////////////////////////////////////////////////////////////

#endif

//////////////////////////////////////////////////////////////////////////

